<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>面向对象</title>
</head>
<body>
<div>
    <pre>
        /*
    * 面向对象:
    *   和面向过程一样,都是一种编程思想;(万物皆对象)
    *   JS本身也是一门面向对象的语言; js就是基于面向对象的编程思想构造出来的;
    *   我们经常去研究一些JS的内置类(Number,String,Object,Array,Promise....),那么这些类都是基于面向对象创建出来的;
    *   平时开发的时候经常去操作这些内置类的实例,通过自习研究这些实例的一些共同的属性和方法;
    *   通过总结这些实例上的一些属性和方法来把他们共同的分成一个类,然后进行开发
    *   来去把他们进行总结,这就是对于面向对象编程的一种应用;
    *   当然,我们平常使用一些框架(jq/VUE/REACT/ANGULAR/WEPY/UNIAPP),他们都是基于面向对象的,我看过vue的源码,发现这些源码也是通过面向对象编程思想创建出来的
    * 在现实中,往往我们都是在写过程,除非自己封装一些组件或者插件还有类(API,全局loading,轮播图,分页器,dialog),这个时候就要用到面向对象编程了
    *
    * JS中的面向对象和后端语言常见的面向对象稍微有些不同,JS中的类和实例是基于原型和原型链机制来处理的.
    *
    *   类: Class(构造函数)
    *       封装: 高内聚低耦合
    *       继承:
    *       多态:
    *           重写
    *           重载
    *
    * */
    </pre>
</div>
<script>
    /*
    * 面向对象:
    *   和面向过程一样,都是一种编程思想;(万物皆对象)
    *   JS本身也是一门面向对象的语言; js就是基于面向对象的编程思想构造出来的;
    *   我们经常去研究一些JS的内置类(Number,String,Object,Array,Promise....),那么这些类都是基于面向对象创建出来的;
    *   平时开发的时候经常去操作这些内置类的实例,通过自习研究这些实例的一些共同的属性和方法;
    *   通过总结这些实例上的一些属性和方法来把他们共同的分成一个类,然后进行开发
    *   来去把他们进行总结,这就是对于面向对象编程的一种应用;
    *   当然,我们平常使用一些框架(jq/VUE/REACT/ANGULAR/WEPY/UNIAPP),他们都是基于面向对象的,我看过vue的源码,发现这些源码也是通过面向对象编程思想创建出来的
    * 在现实中,往往我们都是在写过程,除非自己封装一些组件或者插件还有类(API,全局loading,轮播图,分页器,dialog,$ajax),这个时候就要用到面向对象编程了
    *
    * JS中的面向对象和后端语言常见的面向对象稍微有些不同,JS中的类和实例是基于原型和原型链机制来处理的.
    *
    *   类: Class(构造函数)
    *       封装: 高内聚低耦合
    *       继承: 子类 实例 继承父类的属性和方法
    *       多态:
    *           重写 修改已有的属性和方法
    *           重载 JS本身是没有重载的,重载对于客户端代码来说是没有必要的,我们可以通过arg或者其他的一些情况判断来实现重载效果
    *
    * */

    // Array.prototype.slice = function (){}
    // console.log = function (){}

    //重载 方法名相同,但是参数的个数不同或者参数的数据类型不同,而有不同的处理形式
    // 后端重载  方法的并发数
    // public sum:int(a:int,b:int) function{
    //     return a+b
    // }
    // public sum:int(a:int) function{
    //     return a+100
    // }
    // public sum:int(a:string) function{
    //     return a+"BB"
    // }
    // sum(1,2);
    // sum(1);
    // sum("AA");

    //前端重载
    // function sum(a,b){
    //     return a+b
    // }
    // function sum(a){
    //     return a+100
    // }
    // function sum(a){
    //     return a+"BB"
    // }

    function sum(){
        let len = arguments.length;
        switch (len){
            case 0:
                break;
            case 1:
                return typeof arguments[0] === "string"?a+"BB":a+100
            case 2:
                return arguments[0] + arguments[1]
        }
    }


    // sum(1,2);//3
    // sum(1);//101
    // sum("AA");//AABB

</script>
<!--<script src="./原型链继承.js"></script>-->
<!--<script src="./借用构造函数(call)继承.js"></script>-->
<!--<script src="./组合继承.js"></script>-->
<!--<script src="./寄生组合继承.js"></script>-->
<script src="./ES6中的Class和继承.js"></script>
</body>
</html>